﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Media3D;

namespace FeatureDetection.Inputter {
    public abstract class IInputter {

        /// <summary>
        /// IInputterに渡す入力受付用デリゲート
        /// </summary>
        /// <param name="Position">入力される座標</param>
        public delegate void AddPosition(Vector3D Position);

        /// <summary>
        /// スレッド側から終了を通知して欲しいメソッド
        /// </summary>
        public delegate void EndFunc();

        /// <summary>
        /// 対応デバイス等を初期化する。
        /// </summary>
        /// <returns>有効ならtrue</returns>
        public abstract bool initialize();

        /// <summary>
        /// 入力開始
        /// </summary>
        /// <param name="addpos">座標の入力を受ける関数</param>
        /// スレッドを開始する。スレッドは一定の間隔でaddposに座標を渡す。
        public abstract void startInput(AddPosition addpos, EndFunc endFunc);

        /// <summary>
        /// 入力終了（中断）
        /// </summary>
        /// スレッドに停止要求を出し、スレッドが終わるまで待つ。
        public abstract void endInput();
    }
}
